package br.com.consultsystems.persistencia.impl.configuracao;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

import br.com.consultsystems.dominio.configuracao.Parametros;
import br.com.consultsystems.dominio.tipos.ParametrosChave;
import br.com.consultsystems.persistencia.spec.AbstractAdministradoraRepository;
import br.com.consultsystems.persistencia.spec.configuracao.ParametrosPersistencia;

@Stateless(name = "parametrosPersistencia")
public class ParametrosPersistenciaImpl extends
		AbstractAdministradoraRepository<Parametros> implements
		ParametrosPersistencia {

	protected ParametrosPersistenciaImpl() {
		super(Parametros.class);
	}

	@Override
	public List<Parametros> retrieveAll() {
		return retrieveByCriteria(null);
	}

	@Override
	public String retrieveByChave(ParametrosChave chave) throws Exception {

		final EntityManager em = getEntityManager();
		final CriteriaBuilder criteriaBuilder = createCriteriaBuilder();
		final CriteriaQuery<Parametros> criteriaQuery = createCriteriaQuery(criteriaBuilder);
		final Root<Parametros> root = createRoot(criteriaQuery);
		
		final Path<ParametrosChave> pathChave = root.get("chave");
		final Predicate predicateChave = criteriaBuilder.equal(pathChave, chave);
		criteriaQuery.where(predicateChave);
		
		final TypedQuery<Parametros> typedQuery = em.createQuery(criteriaQuery);
		
		return ( (typedQuery.getResultList().size()) == 0 ? null : typedQuery.getResultList().get(0).getValor() );
	}

}
